<?php 
/**
*@author renchengli
*/

class model{
	protected $table='';//存放表
	protected $db='';//存放mysql对象
	protected $pk='';//存放主键
	protected $fileds=array();//存放表的字段,对传来的数据,如果不是表中的字段的话,你就自动删除
	protected $auto=array();//有些需要的值,客户没有填,但表中需要,那就自动填充一个值或者调用一个方法
	protected $valid=array();//存放要自动验证的字段
	protected $err=array();


	//实例化mysql类,连接数据库
	public function __construct(){
		$this->db=mysql::getIns();
	}

	//选表
	public function table($table){
		$this->table=$tbale;
	}
	//增
	public function add($data){
		$rs=$this->db->autoExecute($this->table,$data);
		if($rs){
			return $this->db->affectRows();
		}else{
			return false;
		}
	}
	//根据主键进行删除
	public function delete($id){
		$sql="delete from " . $this->table . ' where ' . $this->pk . '=' . $id;
		if($this->db->query($sql)){
			return $this->db->affectRows();
		}else{
			return false;
		}
	}
	//根据主键进行取一行数据
	public function find($id){
		$sql='select * from ' . $this->table . ' where '  . $this->pk . '=' . $id;
		return $this->getRow($sql);
	}
	//取所有数据
	public function select(){
		$sql='select * from ' . $this->table;
		return $this->getAll($sql);
	}
	//根据主键修改一条数据
	public function update($data,$id){
		$rs=$this->db->autoExecute($this->table,$data,'update',$this->pk . '=' . $id);
		if($rs){
			return $this->db->affectRows();
		}else{
			return false;
		}
	}
	//自动过滤
	public function _facade($arr){
		$data=array();
		foreach($this->fileds as $k=>$v){
			if(array_key_exists($k,$arr)){
				$data[]=$v;
			}
		}
		return $data;
	}
	//自动填充
	/*
		array('is_set','value',0)
		array('add_time','function','time');
	*/
	public function autofill($data){
		foreach($this->auto as $k=>$v){
			if(!array_key_exists($v[0], $data)){
				switch ($v[1]) {
					case 'value':
						$data[$v[0]]=$v[2];
						break;
					case 'function':
						$data[$v[0]]=call_user_func($v[2]);
						break;
				}
			}
		}
		return $data;
	}
	//自动验证
	/*
		array('goods_name',0/1/2,'报错信息',require/in/between/number/length,'范围')
		1检测值,而且只有三个参数,0是检测在不在这个集合内,2是检测值在不在一个范围内
	*/
	public function _validate($data){
		if(empty($this->valid)){
			return true;
		}
		foreach($this->valid as $k=>$v){
			switch ($v[1]) {
				case '0':
					if(!isset($data[$v[0]])){
						$this->err=$v[2];
						return false;
					}
					$v[4]='';
					if(!$this->check($data[$v[0]],$v[3],$v[4])){
						$this->err=$v[2];
						return false;
					}
					break;
				case '1':
					if(isset($data[$v[0]])){
						if(!$this->check($data[$v[0]],$v[3],$v[4])){
						$this->err=$v[2];
						return false;
						}
					}
					break;
				case '2':
					if(isset($data[$v[0]])&&!empty($data[$v[0]])){
						if(!$this->check($data[$v[0]],$v[3],$v[4])){
						$this->err=$v[2];
						return false;
						}
					}
					break;
			}
		}
		return $data;
	}
	//验证方法,给_validate调用
	public function check($value,$rule,$parm){
		switch ($rule) {
			case 'require':
				return !empty($value);
			case 'in':
				return in_array($value, $parm);
			case 'between':
				$arr=explode(',',$parm);
				list($min,$max)=$arr;
				return $value>=$min&&$value<=$max;
			case 'length':
				$arr=explode(',',$parm);
				list($min,$max)=$arr;
			case 'number':
				return is_numeric($value);
			case 'email':
				return (filter_var($value,FILTER_VALIDATE_EMAIL)!=false);
				break;
			default:
			return false;
		}
	}
	//调出错误的方法
	public function getErr(){
		return $this->err;
	}
	//上一次操作影响的ID
	public function getLastId(){
		return $this->db->getLastId();
	}
}



?>